package com.matrix.media.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.matrix.media.entity.Audio.AudioTrack;
import com.matrix.media.entity.Audio.AudioTrackClip;
import com.matrix.media.entity.Effect.EffectTrack;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class TimeLine {

    //视频轨列表。多个轨道的层叠顺序与数组元素顺序一致，如：数组的第一个元素图层的t在最底层，第二个元素的图层在其之上，以此类推。
    @JSONField(name = "VideoTracks")
    private List<VideoTrack> VideoTracks;

    //音频轨列表。
    @JSONField(name = "AudioTracks")
    private List<AudioTrack> AudioTracks;

    //图片轨列表。注：
    //
    //1）图片轨需叠加在视频轨之上，图片本身作为素材与视频混编时（如图片合成视频场景），请使用视频轨VideoTracks
    //
    //2）多个轨道的层叠顺序与数组元素顺序一致，如：数组的第一个元素图层的t在最底层，第二个元素的图层在其之上，以此类推
    @JSONField(name = "ImageTracks")
    private List<ImageTrack> ImageTracks;

    //字幕轨列表。
    @JSONField(name = "SubtitleTracks")
    private List<SubtitleTrack> SubtitleTracks;

    //特效轨列表。
    @JSONField(name = "EffectTracks")
    private List<EffectTrack> EffectTracks;

    /**
     * 添加视频轨
     * @param videoTrack
     */
    public void addVideoTrack(VideoTrack videoTrack) {
        if (VideoTracks == null) {
            synchronized (this) {
                if (VideoTracks == null) {
                    VideoTracks = new ArrayList<>();
                }
            }
        }
        // 在这里添加您的添加逻辑...
        if (videoTrack == null) {
            // 处理空值情况，例如抛出异常或返回错误
            throw new IllegalArgumentException("videoTrack cannot be null");
        }

        // 检查类型是否正确，例如：
        if (!(videoTrack instanceof VideoTrack)) {
            // 处理类型不匹配情况，例如抛出异常或返回错误
            throw new IllegalArgumentException("videoTrack must be an instance of AudioTrack");
        }

        // 在这里添加您的添加逻辑...
        VideoTracks.add(videoTrack);
    }

    /**
     * 添加音频轨
     * @param audioTrack
     */
    public void addAudioTrack(AudioTrack audioTrack) {
        if (AudioTracks == null) {
            synchronized (this) {
                if (AudioTracks == null) {
                    AudioTracks = new ArrayList<>();
                }
            }
        }
        // 在这里添加您的添加逻辑...
        if (audioTrack == null) {
            // 处理空值情况，例如抛出异常或返回错误
            throw new IllegalArgumentException("audioTrack cannot be null");
        }

        // 检查类型是否正确，例如：
        if (!(audioTrack instanceof AudioTrack)) {
            // 处理类型不匹配情况，例如抛出异常或返回错误
            throw new IllegalArgumentException("audioTrack must be an instance of AudioTrack");
        }

        // 在这里添加您的添加逻辑...
        AudioTracks.add(audioTrack);
    }
}
